package com.weiyuwqj.server.mapper;

import com.weiyuwqj.api.model.BasItem;
import com.weiyuwqj.api.model.vo.AccountCheckingVo;
import com.weiyuwqj.api.model.vo.BasItemVo;
import com.weiyuwqj.api.model.vo.ItemAndPlanVO;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
import tk.mybatis.mapper.common.Mapper;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import java.util.Map;
@Repository
public interface BasItemMapper extends Mapper<BasItem> {

    //后台列表
    List<BasItemVo> getList(Map map);

    //统计发布项目数量
    Integer countByAllItemNum(Map map);

    //统计发布项目金额
    Double sumByAllItemAccount(Map map);

    //统计已还款的项目
    Integer countByRepayItem(Map map);

    //统计未还款的项目
    Integer countByNoRepayItem(Map map);

    //待初审项目数量
    Integer countByFirstItemNum(Map map);

    //待初审项目金额
    Double sumByFirstItemAccount(Map map);

    //未还款金额
    Double sumNoRepayItemAccount(Map map);

    //已还款金额
    Double sumRepayItemAccount(Map map);

    //修改项目状态
    int updateItemStatus(@Param("oldStatus")int oldStatus,@Param("newStatus")int newStatus,@Param("itemId")Integer itemId);

    //修改项目进度
    int updateItemScale(@Param("amount")BigDecimal amount,
                        @Param("oldAmount")BigDecimal oldAmount,
                        @Param("scale") BigDecimal scale,
                        @Param("itemId")Integer itemId);

    int updateItemIsalive(@Param("isalive") int isalive,
                          @Param("itemId")Integer itemId);

    void updateByReleaseTime(Map map);

    int insertItem(BasItem item);

    Map<String,Object> isNewItemInvestCount(Map<String,Object> map);

    //后台统计项目投资人数
    Integer countItemInvestNum(Map map);

    //定时任务
    List<BasItem> getListByEndTime();

    //修改
    Integer modifyItemById(BasItem item);

    //根据id修改发布时间
    Integer modifyReleaseTimeByItemId(Map map);

    //前天项目列表
    List<BasItemVo> listByStatus(Map map);

    //推荐标
    BasItemVo getOneRecommend();

    //未满标项目数量
    Integer sumNoFullItemNum(Map map);

    //未满标项目金额
    Double sumNoFullItemAccount(Map map);

    //未满标差额
    Double sumFullItemAccountBalance(Map map);

    //统计自动投标人数
    Integer countAutoInvestNum(Map map);

    //统计非自动投标人数
    Integer countNoAutoInvestNum(Map map);

    //根据id修改内容
    Integer modifyContentById(@Param("itemContent") String itemContent,@Param("id") Integer id);

    //pc历史项目列表
    List<BasItemVo> getPcHistoryItemList();

    //pc可投项目列表
    List<BasItemVo> getPcItemList(Map map);

    //首页显示新手标单个项目
    BasItem getIsNewItem();
    //首页显示app专享标
    BasItem getMoveVipItem();
    //首页倒计时标专享标
    BasItemVo getTimeItem();
    BasItem getItemByItemType(Integer itemType);
    List<BasItem> getCdbItemListLimitThree();
    BasItem getCompleteItemByItemType(Integer itemType);

    //查询倒计时标列表
    List<BasItem> getItemCountdownList();

    //查询当天所有标的详情
    List<BasItem> queryTodayBidData(Date dates);

    /**
     * 修改标的包id
     * @param assetPackageId 包id
     * @param itemStr        项目id数组
     * @return
     */
    Integer modifyPackageIdById(@Param("assetPackageId")Integer assetPackageId,@Param("itemStr")String[] itemStr);

    //根据包Id获取列表
    List<BasItem> listUnderByPackageId(Integer id);

    /*
    * 通过包ID查询包下面的标
    * @param packageId 包Id
    * */
    List<BasItem> getItemListByPackageId(@Param("packageId")Integer packageId);

    BasItem getItemByPackageId(Integer packageId);

    /**
     * 通过标ID修改状态为要修改的状态
     * @param itemStatus 要修改的状态
     * @param packageId   包id
     * @return
     */
    Integer modifyitemStatusById(@Param("itemStatus")Integer itemStatus,@Param("packageId")Integer packageId);

    /**
     * 资产转标
     * @param item 标对象
     * @return
     */
    Integer assetsShiftBid(BasItem item);
    /*
    * 最后一条数据的项目编号
    * */
    String getLastOne();

    //更新标账户余额
    int updateUsableById(@Param(value = "oldUsable") BigDecimal usable,
                         @Param(value = "operMoney") BigDecimal actualRepayAmount,
                         @Param(value = "itemId") Integer itemId);

    /**
     * 推荐标列表
     * @return 推荐表列表
     */
	List<BasItemVo> queryRecomendList();

    /**
     * 根据itemId修改复审流程状态
     * @param newStatus
     * @param oldStatus
     * @param itemId
     * @return
     */
    Integer modifyItemFullStatusByItemId(@Param(value = "newStatus") Integer newStatus,
                                         @Param(value = "oldStatus") Integer oldStatus,
                                         @Param(value = "itemId") Integer itemId);

    //对账管理列表
    List<AccountCheckingVo> checkAccountList(Map map);

    //对账管理统计
    Map checkAccountStat(Map map);

    //根据itemId修改itemNumber
    int updateItemNumberByItemId(@Param(value = "itemNumber") String itemNumber, @Param(value = "itemId")Integer itemId);

    /**
     * app项目和包计划列表
     * @return
     */
    List<ItemAndPlanVO> getItemAndPackagePlanList();
}